package taller.dataLayer.managers;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import taller.dataLayer.entities.Rodamiento;
import taller.dataLayer.vo.RodamientoVO;

@Stateless
@SuppressWarnings("unchecked")
public class AdministradorRodamientosBean implements AdministradorRodamientos {
	@PersistenceContext(name="taller14")
	EntityManager entityManager;
    
	public AdministradorRodamientosBean() {
    }

    public void guardar(RodamientoVO rodamiento) {
    	Rodamiento rodamientoEB = new Rodamiento();
    	rodamientoEB.setVO(rodamiento);
    	if (this.buscar(rodamiento)!=null) {
			entityManager.merge(rodamientoEB);
		} else {
			entityManager.persist(rodamientoEB);
		}
    }
    
	public RodamientoVO buscar(RodamientoVO rodamiento) {
		Rodamiento retVal = (Rodamiento) entityManager.find(Rodamiento.class, rodamiento.getCodigo());
		
		return retVal != null? retVal.getVO() : null;
	}
	
	public List<RodamientoVO> buscarTodos() {
		List<Rodamiento> rodamientos = entityManager.createQuery("from Rodamiento order by codigo").getResultList();
		List<RodamientoVO> rodamientosVO = new ArrayList<RodamientoVO>();
		Iterator<Rodamiento> i = rodamientos.iterator();
		while(i.hasNext()){
			RodamientoVO rodamiento = i.next().getVO();
			rodamientosVO.add(rodamiento);
		}
		
		return rodamientosVO;
	}
	
	public List<RodamientoVO> buscarRodamientos(int desdeRegistro, int cantidad) {
		Query query = entityManager.createQuery("from Rodamiento order by codigo");
		query.setFirstResult(desdeRegistro);
		query.setMaxResults(cantidad);
		List<Rodamiento> rodamientos = query.getResultList();
		
		List<RodamientoVO> rodamientosVO = new ArrayList<RodamientoVO>();
		Iterator<Rodamiento> i = rodamientos.iterator();
		while(i.hasNext()){
			RodamientoVO rodamiento = i.next().getVO();
			rodamientosVO.add(rodamiento);
		}
		
		return rodamientosVO;
	}
	
	public int getCantidadRodamientos() {
		Query query = entityManager.createQuery("select count(*) from Rodamiento");
		Long cantidad = (Long)query.getSingleResult();
		
		return cantidad.intValue();
	}
}
